SORACOMのM5Stack 3Gを試してみました
先月開催されたSORACOM Discoveryというイベントで、「M5Stack用 3G 拡張ボード」というプロトタイピング用のモジュールが発表になりました。こちらを試してみたのでレポートします。
https://www.discovery2019.soracom.jp/
M5Stack 3G
以前ご紹介しましたが、M5Stackとは、5cm角サイズの筐体に、液晶画面とWiFiを搭載したプロトタイピング用モジュールのことです。M5Stackは、LCDやバッテリ、拡張コネクタやGloveコネクタを標準装備しており、IoT関係の実験やプロトタイピングを簡単に行うことができます。Arduino環境で開発ができますので、必要なコードは最小限で済みます。小型で扱いやすいので大変人気があります。
これに3G通信機能を追加できるのが、M5Stack 3Gモジュールです。SORACOMさんの通信サービスを使って、WiFiが無い環境でも簡単にデバイスをインターネット接続することができるようになるわけです。
準備
M5Stack 3Gを使って開発をするための準備をします。手順はこちらに書かれている通りです。 https://dev.soracom.io/jp/start/m5stack/
すでにM5Stackを使ったことがあれば、Arduino環境はインストール済みかもしれません。アップデート等が必要であれば適宜行っておきます。
ライブラリの追加
既存のArduino環境に加えて、M5Stack 3Gモジュールを使用するために、下記が追加で必要でした。
3Gモジュールを使用するためのライブラリを追加します。メニューの「ライブラリを管理…」を開き、M5Stackを検索します。 さらに3Gモジュールを使用するためのライブラリを追加するために、同様に、TinyGSMを検索します。 見つかった、「TinyGSM by Volodymyr Shymanskyy」をインストールします。
SIM
SIMはもちろんSORACOM Airを使用します。ソラコムのユーザーコンソールにアカウントを作成のうえ、SIMを登録し有効にしておきます。
モジュールの準備
M5Stack 3Gモジュールは簡単な組み立てが必要です。フレームに基板をネジ止めする必要があります。工具として1.5mmの六角レンチが必要です。 フレームにボードを取り付ける前に、SIMをボードに差し込んでおく必要があります。
M5Stack 3Gは、M5Stackのオプションモジュールです。バッテリーとなっている裏蓋と、M5Stack本体の間に、M5Stack 3Gモジュールを挟んで、それぞれのピンとソケットが合うように取り付けます。
サンプルコード
サンプルアプリケーションとして、こちらに記載されているHTTPアクセスを試してみます。
Arduino IDEで新規作成し、Webに掲載されているコードを貼り付けます。
#include <M5Stack.h> #define TINY_GSM_MODEM_UBLOX #include <TinyGsmClient.h> TinyGsm modem(Serial2); /* 3G board modem */ TinyGsmClient ctx(modem); void setup() { Serial.begin(115200); M5.begin(); M5.Lcd.clear(BLACK); M5.Lcd.setTextColor(WHITE); M5.Lcd.println(F("M5Stack + 3G Module")); M5.Lcd.print(F("modem.restart()")); Serial2.begin(115200, SERIAL_8N1, 16, 17); modem.restart(); M5.Lcd.println(F("done")); M5.Lcd.print(F("getModemInfo:")); String modemInfo = modem.getModemInfo(); M5.Lcd.println(modemInfo); M5.Lcd.print(F("waitForNetwork()")); while (!modem.waitForNetwork()) M5.Lcd.print("."); M5.Lcd.println(F("Ok")); M5.Lcd.print(F("gprsConnect(soracom.io)")); modem.gprsConnect("soracom.io", "sora", "sora"); M5.Lcd.println(F("done")); M5.Lcd.print(F("isNetworkConnected()")); while (!modem.isNetworkConnected()) M5.Lcd.print("."); M5.Lcd.println(F("Ok")); M5.Lcd.print(F("My IP addr: ")); IPAddress ipaddr = modem.localIP(); M5.Lcd.print(ipaddr); delay(2000); } void loop() { M5.update(); M5.Lcd.clear(BLACK); M5.Lcd.setCursor(0, 0); M5.Lcd.println(F("World Clock from worldtimeapi.org")); /* HTTP GET example */ if (!ctx.connect("worldtimeapi.org", 80)) { Serial.println(F("Connect failed.")); return; } Serial.println(F("connected.")); /* send request */ ctx.println("GET /api/timezone/Asia/Tokyo.txt HTTP/1.0"); ctx.println("Host: worldtimeapi.org"); ctx.println(); Serial.println("sent."); /* receive response */ while (ctx.connected()) { String line = ctx.readStringUntil('\n'); Serial.println(line); if (line == "\r") { Serial.println("headers received."); break; } } char buf[1 * 1024] = {0}; ctx.readBytes(buf, sizeof(buf)); /* body */ ctx.stop(); M5.Lcd.println(buf); delay(1000 * 10); }
ポイントは下記のあたりでしょうか。
- TINY_GSM_MODEM_UBLOX というdefineをすること
- モデムとの通信に使用するSerial2を適切に設定すること
- gprsConnectで与えるAPN, Username, Passwordをそれぞれ、
soracom.io
,sora
,sora
と設定すること
あとはTinyGsmClientを使用してHTTP通信ができます。
動かしてみる
実際に動かしてみた様子です。
最初にモデムの初期化を行います。うまく行っていれば、モデムのモデル番号等の取得が確認できます。(ちなみになんらかの理由でモデムにアクセスできない場合は、ここが表示されません)
そして携帯回線との接続が行われ、IPアドレスが取得できて準備完了です。ここまでおよそ30秒程度を要します。
そのあと、worldtimeapi.org
にアクセスし、各種時間情報が取得に成功しているようです。
消費電流
気になる消費電流ですが、ちょっと比べてみました。M5Stack単体で動作するときはおよそ80mAほどを消費します。一方このM5Stack 3Gモジュールを追加したときには、元の本体の分と合わせて、100 ~ 220mA程度の消費が観察されました。結構変動しますが、150mA程度のことが多いようです。使用状態によっても変わると思いますが、携帯回線に接続していることを思えば、比較的省電力なのではないかと思います。
上手な利用方法としては、定期的に起動し、通信を行い、スリープすることを繰り返すことになるかと思います。IP取得までそれなりの時間がかかりますので、それを留意して動作パターンを決める必要があると思われます。
まとめ
ソラコムさんで販売開始した、M5Stack用 3G 拡張ボードを試してみました。M5Stack 3Gにより、WiFiが無い環境でもインターネットへの接続が気軽に行えるようになります。しかもソラコムのインフラやサービスを使えますので、暗号化や証明書の扱いなど、非力な組み込みCPUには荷が重い処理をオフロードすることも可能となります。いろいろと面白い使い方ができそうです。